class code1 {
    //找到字符串中所有字母异位词:滑动窗口+字母出现次数相同
    public List<Integer> findAnagrams(String s, String p) {
        List<Integer> list = new ArrayList<>();
        int n = s.length();
        int m = p.length();
        if(n < m) return list;
        int[] count = new int[26];

        //初始化
        for(int i=0;i<p.length();i++) {
            count[p.charAt(i)-'a']++;
            count[s.charAt(i)-'a']--;
        }
        if(allZero(count)) {
            list.add(0);
        }
        //滑动窗口
        for(int i=m;i<n;i++) {
            //进窗口
            count[s.charAt(i)-'a']--;
            //出窗口
            count[s.charAt(i-m)-'a']++;
            //判断
            if(allZero(count)) {
                //更新结果
                list.add(i-m+1);
            }
        }
        return list;
    }

    public boolean allZero(int[] count) {
        for(int x:count) {
            if(x!=0) return false;
        }
        return true;
    }
}